//package com.leetroll.admin.security;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.leetroll.api.service.AdminService;
//import com.leetroll.common.constant.SQLConstant;
//import com.leetroll.common.constant.SysConstant;
//import com.leetroll.common.entity.Admin;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.core.userdetails.UsernameNotFoundException;
//import org.springframework.stereotype.Service;
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * 将SpringSecurity中的用户管理和数据库的管理员对应起来
// *
// * UserDetailsService：获取用户信息的核心接口，里面定义了根据用户名查询用户信息，
// * 可以实现该接口覆盖默认的用户信息查询方法，完成自定义用户信息查询，返回一个UserDetails用户信息封装对象
// */
//@Service
//public class SecurityUserDetailsServiceImpl implements UserDetailsService {
//
//    @Autowired
//    private RoleService roleService;
//
//    @Autowired
//    private  AdminService adminService;
//
//
//    /**
//     * @param username 浏览器输入的用户名【需要保证用户名的唯一性】
//     */
//    @Override
//    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//
//        QueryWrapper<Admin> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq(SQLConstant.USER_NAME, username);
//        queryWrapper.last(SysConstant.LIMIT_ONE);
//        //根据username查询admin表
//        Admin admin = adminService.getOne(queryWrapper);
//        if (admin == null) {
//            throw new UsernameNotFoundException(String.format("No user found with username【找不到用户】 '%s'.", username));
//        } else {
//            //查询出角色信息封装到admin中
//            List<String> roleNames = new ArrayList<>();
//            Role role = roleService.getById(admin.getRoleUid());
//            roleNames.add(role.getRoleName());
//            admin.setRoleNames(roleNames);
//            //返回的是自己构造的一个UserDetails对象，位置为：com.leetroll.common.config.security.SecurityUser
//            return SecurityUserFactory.create(admin);
//        }
//    }
//}
